#include <stdio.h>
#include <stdarg.h>
#include <string.h>

#include "myesp8266.h"
#include "usart.h"

uint8_t USART5_TxBuff[256];
uint8_t USART5_RxBuff[1024];

int esp8266_sendAT(int timeout, char* fmt, ...){
	//清空数据接收缓存区
	memset(USART5_RxBuff, 0 , sizeof(USART5_RxBuff));
	//printf("AT指令发送前:[%d][%s]\r\n", strlen((char*)USART5_RxBuff), USART5_RxBuff);
	//1. 不定长的变量
  va_list ap;
	//2. 用于初始化一个 va_list 变量，以便在可变参数函数中访问可变数量的参数。
	//参数1: 访问可变参数的类型(就是 va_list变量)
	//参数2: 可变参数列表之前的最后一个已知的固定参数
	va_start(ap,fmt);
	//3. 将不定长格式 格式化输出到数组
	// fmt = "字符串"     ap 不定长参数
	// fmt = "%s  %d  %x"   ap = ch,numd,numx 指定格式 -> "\"hello\",10,0x32"
	vsprintf((char*)USART5_TxBuff,fmt,ap);
	//4. 释放 va_list变量
	va_end(ap);
	
	//向串口发送数据
	printf("USART5_TxBuff=[%s]\r\n", USART5_TxBuff);
	HAL_UART_Transmit(&huart5, USART5_TxBuff, strlen((char*)USART5_TxBuff), 2000);
	
	//TODO 核对AT返回数据，是否有OK
	for(int i=0;i<timeout;i+=100){
		//printf("AT指令发送后i=[%d]:[%d][%s]\r\n", i,strlen((char*)USART5_RxBuff), USART5_RxBuff);
		if(strstr((char*)USART5_RxBuff, "OK") != NULL)
			return 1;
		HAL_Delay(100);//正常返回
	}
	return 0;//超时
}


